package utils

// ArrayFilter 过滤数组中的元素，返回满足回调函数条件的元素组成的数组。
// 支持泛型，可以处理任意类型的数组。
func ArrayFilter[T any](array []T, callback func(T) bool) []T {
	var result []T
	for _, item := range array {
		if callback(item) {
			result = append(result, item)
		}
	}
	return result
}

// ArrayFind 查找数组中第一个满足回调函数条件的元素。
// 支持泛型，可以处理任意类型的数组。
func ArrayFind[T any](array []T, callback func(T) bool) T {
	for _, item := range array {
		if callback(item) {
			return item
		}
	}
	var zeroValue T // 如果未找到，返回零值
	return zeroValue
}

// ArrayFindIndex 查找数组中第一个满足回调函数条件的元素的索引。
// 支持泛型，可以处理任意类型的数组。
func ArrayFindIndex[T any](array []T, callback func(T) bool) int {
	for index, item := range array {
		if callback(item) {
			return index
		}
	}
	return -1 // 如果未找到，返回 -1
}

// ArrayContact 合并两个数组为一个新的数组。
// 支持泛型，可以处理任意类型的数组。
func ArrayContact[T any](array1 []T, array2 []T) []T {
	result := make([]T, 0, len(array1)+len(array2))
	result = append(result, array1...)
	result = append(result, array2...)
	return result
}
